package com.jinzhi.jzapi.common.controller;

import com.jinzhi.jzapi.common.pojo.CerUtilsVo;
import com.jinzhi.jzapi.utils.CerSynthesisUtil;
import com.jinzhi.jzweb.domain.*;
import com.jinzhi.jzweb.pojo.TrainingCerVo;
import com.jinzhi.jzweb.service.*;
import com.jinzhi.jzweb.utils.CertificateUtil;
import com.jinzhi.jzweb.utils.ValuesUtil;
import com.jinzhi.oss.service.OssService;
import com.jinzhi.sys.domain.UserDO;
import com.jinzhi.sys.service.UserService;
import net.sf.json.JSONArray;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

@Component
public class ApittController {

    @Autowired
    private TrainingCertificatesService trainingCertificatesService;
    @Autowired
    private ExaminationPaperService examinationPaperService;
    @Autowired
    private ExaminationBatchService examinationBatchService;
    @Autowired
    private StuSignUpService stuSignUpService;
    @Autowired
    private ExaminationResultsService examinationResultsService;
    @Autowired
    private ExaminationAnswerSheetService examinationAnswerSheetService;
    @Autowired
    private ExaminationQuestionsService examinationQuestionsService;
    @Autowired
    private OrganizationNewsService organizationNewsService;
    @Autowired
    private UserService userService;
    @Autowired
    private OssService ossService;
    //幼儿照护
    @Async
    public void certificateUser( List<TrainingCerVo> list)throws Exception{
        for(TrainingCerVo li:list){
            UserDO userDO = userService.findOneByKv("mobile",li.getStuMobile().trim());
            if (userDO != null) {
                if(StringUtils.isNotBlank(li.getPoliticsStatus())){
                    userDO.setPoliticalAffiliation(li.getPoliticsStatus());
                }

                if(StringUtils.isNotBlank(li.getSpecialty())){
                    userDO.setMajor(li.getSpecialty());
                }
                if(StringUtils.isNotBlank(li.getIdCard())){
                    userDO.setIdNumber(li.getIdCard());
                }
                if(StringUtils.isNotBlank(li.getPositionName())){
                    userDO.setOfficialCapacity(li.getPositionName());
                }
                if(StringUtils.isNotBlank(li.getEmail())){
                    userDO.setEmail(li.getEmail());
                }
                if(StringUtils.isNotBlank(li.getAddresses())){
                    userDO.setLiveAddress(li.getAddresses());
                }

                String ss=null;
                if(StringUtils.isNotBlank(li.getImageUrl())){
                    File file1 =new File(li.getImageUrl());
                    InputStream inputStream = new FileInputStream(file1);
                    MultipartFile multipartFile = new MockMultipartFile(file1.getName(), inputStream);
                     ss= ossService.uploadFileOssName(multipartFile);

                }

                List<TrainingCertificatesDO> userRole = trainingCertificatesService.findByKv("user_id", userDO.getId());
                for(TrainingCertificatesDO li1:userRole){
                    if(!StringUtils.isNotBlank(li1.getOrgName())){
                        UserDO userDO1 = userService.findOneByKv("mobile",li.getStuMobile().trim());
                        if(userDO1!=null){
                            if(StringUtils.isNotBlank(userDO1.getOrgName())){
                                li1.setOrgName(userDO1.getOrgName());
                            }else {
                                li1.setOrgName(li.getWorkUnit());
                            }
                        }else {
                            li1.setOrgName(li.getWorkUnit());
                        }
                    }
                    li1.setCertificatesType(CertificateUtil.comNumber1(li1.getNumbers(),li1.getNumbers()));
                    if(StringUtils.isNotBlank(ss)){
                        li1.setInchPhotograph(ss);

                   }

                    trainingCertificatesService.updateById(li1);
                }
                if(!StringUtils.isNotBlank(userDO.getOrgName())){
                            OrganizationNewsDO organizationNewsDO = organizationNewsService.findOneByKv("mobile",li.getStuMobile().trim());
                            if(organizationNewsDO!=null){
                                userDO.setOrgName(organizationNewsDO.getName());
                                userDO.setOrgId(organizationNewsDO.getId());
                            }else {
                                userDO.setOrgName(li.getWorkUnit());
                            }

                }
                if(StringUtils.isNotBlank(ss)){
                    userDO.setHeadPortrait(ss);
                }

                boolean b=  userService.updateById(userDO);
            }
        }


    }
    //幼儿照护
    @Async
    public void doTask11(List<CerUtilsVo> cerUtilsVos, List<TrainingCertificatesDO> traCerDOList){
        // 实现run方法
        for (int i = 0; i < cerUtilsVos.size(); i++) {
            //证书图片
            String cerImgUrl = null;
            String cerImgUrlNoSale = null;
            if (cerUtilsVos.get(i).getType() == 0) {
                try {
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
                    cerImgUrl = CerSynthesisUtil.overTrainingImage(0, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getNumPeriods(), cerUtilsVos.get(i).getTrainingNumber(),
                            cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(), cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getCerMath(),
                            cerUtilsVos.get(i).getCerDay(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getGrade());
                    cerImgUrlNoSale = CerSynthesisUtil.overTrainingImage(1, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getNumPeriods(), cerUtilsVos.get(i).getTrainingNumber(),
                            cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(), cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getCerMath(),
                            cerUtilsVos.get(i).getCerDay(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getGrade());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else if (cerUtilsVos.get(i).getType() == 1) {
                try {
                    //考评员证书
                    //参数说明：背景图，学员姓名，学员图像， 身份证号码，证书编码，证书名称，有效日期
                    cerImgUrl = CerSynthesisUtil.overTraExaImage(cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getEffectiveDate(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getGrade(),cerUtilsVos.get(i).getElectronicSeal());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 2) {
                try {
                    //考务技术员证书
                    //参数说明：背景图，学员姓名，学员图像， 身份证号码，证书编码，证书名称，有效日期
                    cerImgUrl = CerSynthesisUtil.overTraExaAffImage(cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getEffectiveDate(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getElectronicSeal());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 3) {
                try {
                	//考务技术员-结业证书
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
                    cerImgUrl = CerSynthesisUtil.overTraAraGradiningImage(0, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getNumPeriods(), cerUtilsVos.get(i).getTrainingNumber(),
                            cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(), cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getCerMath(),
                            cerUtilsVos.get(i).getCerDay(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getWorkUnit());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } 
            else if (cerUtilsVos.get(i).getType() == 4) {
                try {
                    //督导员证
                    //参数说明：背景图，学员姓名，学员图像， 身份证号码，证书编码，证书名称，有效日期
                    cerImgUrl = CerSynthesisUtil.overTraSupervisorExaAffImage(cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getEffectiveDate(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getElectronicSeal());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 5) {
                try {
                	//督导员-结业证书
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
                    cerImgUrl = CerSynthesisUtil.overTraSupervisorGradiningImage(0, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getNumPeriods(), cerUtilsVos.get(i).getTrainingNumber(),
                            cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(), cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getCerMath(),
                            cerUtilsVos.get(i).getCerDay(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getWorkUnit());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 101) {
                try {
                    //整理归纳-结业证书
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名， 身份证号码，证书编码，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份
                    cerImgUrl = CerSynthesisUtil.overStoragEngineerImage(1, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getWorkUnit(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getNumPeriods(),
                            cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(), cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getCerMath(),
                            cerUtilsVos.get(i).getCerDay(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getPracticeItem());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            else if (cerUtilsVos.get(i).getType() == 102) {
                try {
                    //职业技能师资证书 vocational skills
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名， 身份证号码，证书编码，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份
                    cerImgUrl = CerSynthesisUtil.vocationalSkills(1, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(),
                            cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(),
                            cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getPracticeItem());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            else if (cerUtilsVos.get(i).getType() == 6) {
                try {
                    //种子师资
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
                    cerImgUrl = CerSynthesisUtil.seedOverTrainingImage(0, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getNumPeriods(), cerUtilsVos.get(i).getTrainingNumber(),
                            cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(), cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getCerMath(),
                            cerUtilsVos.get(i).getCerDay(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getWorkUnit());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 7) {
                try {
                    //公益师资
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
                    cerImgUrl = CerSynthesisUtil.freeOverTrainingImage(0, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getNumPeriods(), cerUtilsVos.get(i).getTrainingNumber(),
                            cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(), cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getCerMath(),
                            cerUtilsVos.get(i).getCerDay(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getWorkUnit());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 8) {
                try {
                    //优秀学员
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
                    cerImgUrl = CerSynthesisUtil.fineStudentTrainingImage(0, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getNumPeriods(), cerUtilsVos.get(i).getTrainingNumber(),
                            cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(), cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getCerMath(),
                            cerUtilsVos.get(i).getCerDay(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getWorkUnit());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 9) {
                try {
                    //公益师资
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
                    cerImgUrl = CerSynthesisUtil.freeOverTrainingImageAll(0, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getNumPeriods(), cerUtilsVos.get(i).getTrainingNumber(),
                            cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(), cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getCerMath(),
                            cerUtilsVos.get(i).getCerDay(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getWorkUnit());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 10) {
                try {
                    //其他公益师资（泰康健康财富规划）
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
                    cerImgUrl = CerSynthesisUtil.OtherOverTrainingImageJk(0, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getNumPeriods(), cerUtilsVos.get(i).getTrainingNumber(),
                            cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(), cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getCerMath(),
                            cerUtilsVos.get(i).getCerDay(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getWorkUnit());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 11||cerUtilsVos.get(i).getType() == 12||cerUtilsVos.get(i).getType() == 13) {
                try {
                    //优秀学员
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
//                    cerImgUrl = CerSynthesisUtil.prizeImage(cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath());
                    cerImgUrl = CerSynthesisUtil.prizeImage(cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getType());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 14){ //金职大讲堂结业证书
                System.out.println("金职大讲堂结业证书生成方法--------------------------------------------------------------------");
                System.out.println("证书模板路径："+cerUtilsVos.get(i).getBackgroundPath());
                System.out.println("印章路径："+cerUtilsVos.get(i).getElectronicSeal());

                try {
                    cerImgUrl = CerSynthesisUtil.prizeImageJYZS(0,cerUtilsVos.get(i).getBackgroundPath(),
                            cerUtilsVos.get(i).getStuName(),cerUtilsVos.get(i).getCerNumber(),
                            cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getCerYear(),
                            cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getCerDay(),cerUtilsVos.get(i).getNumPeriods(),
                            cerUtilsVos.get(i).getIdCard(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getTrainingNumber(),cerUtilsVos.get(i).getTraYear(),cerUtilsVos.get(i).getTraMath());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 15){ //优秀企业证合成方法
                System.out.println("优秀组织单位合成方法--------------------------------------------------------------------");
                System.out.println("证书模板路径："+cerUtilsVos.get(i).getBackgroundPath());
                System.out.println("印章路径："+cerUtilsVos.get(i).getElectronicSeal());

                try {
                    cerImgUrl = CerSynthesisUtil.prizeImageYXZZDW(0,cerUtilsVos.get(i).getBackgroundPath(),cerUtilsVos.get(i).getWorkUnit(),
                            cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getElectronicSeal(),
                            cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getCerDay(),cerUtilsVos.get(i).getNumPeriods());
//                    cerImgUrl = CerSynthesisUtil.prizeImageYXZZDW(0,cerUtilsVos.get(i).getBackgroundPath(),cerUtilsVos.get(i).getWorkUnit(),
//                            cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getElectronicSeal(),
//                            cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getCerDay(),cerUtilsVos.get(i).getNumPeriods(),cerUtilsVos.get(i).getTraYear());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 16){
                System.out.println("优秀学员合成方法--------------------------------------------------------------------");
                System.out.println("证书模板路径："+cerUtilsVos.get(i).getBackgroundPath());
                System.out.println("印章路径："+cerUtilsVos.get(i).getElectronicSeal());

                try {
                    cerImgUrl = CerSynthesisUtil.prizeImageYXXY(0,cerUtilsVos.get(i).getBackgroundPath(),
                            cerUtilsVos.get(i).getStuName(),cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getCerYear(),
                            cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getCerDay(),cerUtilsVos.get(i).getNumPeriods());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            } else if (cerUtilsVos.get(i).getType() == 19||cerUtilsVos.get(i).getType() == 20) {
                System.out.println("第"+(i+1)+"次循环生成证书数据为++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"+cerUtilsVos.get(i));
                try {
                    cerImgUrl = CerSynthesisUtil.prizeImageSHiZi4(0, cerUtilsVos.get(i).getBackgroundPath()
                            , cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getElectronicSeal(),
                            cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(), cerUtilsVos.get(i).getTrainingNumber(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getWorkUnit(), cerUtilsVos.get(i).getNumPeriods(), cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getCerMath(), cerUtilsVos.get(i).getCerDay());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 21) {
                try {
//                    是否带章，证书模板，名字，证书编号，公章地址，培训年份，培训月份，身份证号，工作单位，学时，证书落款年份，证书落款月份，证书落款日
                   cerImgUrl = CerSynthesisUtil.prizeImageSZTGJH(0,cerUtilsVos.get(i).getBackgroundPath(),cerUtilsVos.get(i).getStuName(),cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getElectronicSeal(),
                           cerUtilsVos.get(i).getTraYear(),cerUtilsVos.get(i).getTraMath(),cerUtilsVos.get(i).getIdCard(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getNumPeriods(),
                           cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getCerDay());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            else if (cerUtilsVos.get(i).getType() == 22) {
                try {
//                    是否带章，证书模板，名字，证书编号，公章地址，培训年份，培训月份，身份证号，工作单位，学时，证书落款年份，证书落款月份，证书落款日
                    cerImgUrl = CerSynthesisUtil.prizeImageYYJXNLTS(0,cerUtilsVos.get(i).getBackgroundPath(),cerUtilsVos.get(i).getStuName(),cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getElectronicSeal(),
                            cerUtilsVos.get(i).getTraYear(),cerUtilsVos.get(i).getTraMath(),cerUtilsVos.get(i).getTraDay(),cerUtilsVos.get(i).getIdCard(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getNumPeriods(),
                            cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getCerDay());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            else if (cerUtilsVos.get(i).getType() == 23) {
                try {
//                    是否带章，证书模板，名字，证书编号，公章地址，培训年份，培训月份，身份证号，工作单位，学时，证书落款年份，证书落款月份，证书落款日
                    cerImgUrl = CerSynthesisUtil.prizeImagJYTSZS(0,cerUtilsVos.get(i).getBackgroundPath(),cerUtilsVos.get(i).getStuName(),cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getElectronicSeal(),
                            cerUtilsVos.get(i).getTraYear(),cerUtilsVos.get(i).getTraMath(),cerUtilsVos.get(i).getTraDay(),cerUtilsVos.get(i).getIdCard(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getNumPeriods(),
                            cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getCerDay(),cerUtilsVos.get(i).getStuImg());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            else if (cerUtilsVos.get(i).getType() == 24) {
                try {
//                    是否带章，证书模板，名字，证书编号，公章地址，培训年份，培训月份，身份证号，工作单位，学时，证书落款年份，证书落款月份，证书落款日
                    cerImgUrl = CerSynthesisUtil.prizeImagJTJYZDKC(0,cerUtilsVos.get(i).getBackgroundPath(),cerUtilsVos.get(i).getStuName(),cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getElectronicSeal(),
                            cerUtilsVos.get(i).getTraYear(),cerUtilsVos.get(i).getTraMath(),cerUtilsVos.get(i).getTraDay(),cerUtilsVos.get(i).getIdCard(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getNumPeriods(),
                            cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getCerDay());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            else if (cerUtilsVos.get(i).getType() == 25) {
                try {
//                    是否带章，证书模板，名字，证书编号，公章地址，培训年份，培训月份，身份证号，工作单位，学时，证书落款年份，证书落款月份，证书落款日
                    cerImgUrl = CerSynthesisUtil.prizeImagJXNLBSYXB(0,cerUtilsVos.get(i).getBackgroundPath(),cerUtilsVos.get(i).getStuName(),cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getElectronicSeal(),
                            cerUtilsVos.get(i).getTraYear(),cerUtilsVos.get(i).getTraMath(),cerUtilsVos.get(i).getTraDay(),cerUtilsVos.get(i).getIdCard(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getNumPeriods(),
                            cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getCerDay());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            else if (cerUtilsVos.get(i).getType() == 26) {
                try {
//                    是否带章，证书模板，名字，证书编号，公章地址，培训年份，培训月份，身份证号，工作单位，学时，证书落款年份，证书落款月份，证书落款日
                    cerImgUrl = CerSynthesisUtil.prizeImagBSBSPXB(0,cerUtilsVos.get(i).getBackgroundPath(),cerUtilsVos.get(i).getStuName(),cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getElectronicSeal(),
                            cerUtilsVos.get(i).getTraYear(),cerUtilsVos.get(i).getTraMath(),cerUtilsVos.get(i).getTraDay(),cerUtilsVos.get(i).getIdCard(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getNumPeriods(),
                            cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getCerDay());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            else if (cerUtilsVos.get(i).getType() == 90 || cerUtilsVos.get(i).getType() == 91 || cerUtilsVos.get(i).getType() == 92 || cerUtilsVos.get(i).getType() == 93 || cerUtilsVos.get(i).getType() == 94 || cerUtilsVos.get(i).getType() == 95 || cerUtilsVos.get(i).getType() == 96) {
                try {
//                    是否带章，证书模板，名字，证书编号，公章地址，培训年份，培训月份，身份证号，工作单位，学时，证书落款年份，证书落款月份，证书落款日
                    cerImgUrl = CerSynthesisUtil.prizeImagCJRH(0,cerUtilsVos.get(i).getBackgroundPath(),cerUtilsVos.get(i).getStuName(),cerUtilsVos.get(i).getCerNumber());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            else if (cerUtilsVos.get(i).getType() == 97) {
                //志愿者证书
             try {
//                    是否带章，证书模板，名字，证书编号，公章地址，培训年份，培训月份，身份证号，工作单位，学时，证书落款年份，证书落款月份，证书落款日
                    cerImgUrl = CerSynthesisUtil.prizeImagZYZFWZS(0,cerUtilsVos.get(i).getBackgroundPath(),cerUtilsVos.get(i).getStuName(),cerUtilsVos.get(i).getElectronicSeal(),
                            cerUtilsVos.get(i).getNumPeriods(), cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getCerDay(),cerUtilsVos.get(i).getCerNumber());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            else if (cerUtilsVos.get(i).getType() == 111) {
                try {
                    cerImgUrl = CerSynthesisUtil.prizeImageSJXMJYZS(0,cerUtilsVos.get(i).getBackgroundPath(),cerUtilsVos.get(i).getStuName()
                            ,cerUtilsVos.get(i).getIdCard(),cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getTraYear(),cerUtilsVos.get(i).getTraMath()
                            ,cerUtilsVos.get(i).getTraDay(),cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getCerDay()
                            ,cerUtilsVos.get(i).getPracticeItem(),cerUtilsVos.get(i).getXxclassHour(),cerUtilsVos.get(i).getXsclassHour(),
                            cerUtilsVos.get(i).getQtclassHour(),cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getCerDay(),
                            cerUtilsVos.get(i).getElectronicSeal());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            else if (cerUtilsVos.get(i).getType() == 103) {
                try {
                    //优秀案例
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
                    cerImgUrl = CerSynthesisUtil.prizeImageYXAL(0,cerUtilsVos.get(i).getBackgroundPath()
                            ,cerUtilsVos.get(i).getStuName(),cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath()
                            ,cerUtilsVos.get(i).getCerDay(),cerUtilsVos.get(i).getWorkUnit()
                            , cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getNumPeriods(),cerUtilsVos.get(i).getTraYear());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            else if (cerUtilsVos.get(i).getType() == 104) {
                try {
                    //优秀案例
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
                    cerImgUrl = CerSynthesisUtil.prizeImageYXZZ(1,cerUtilsVos.get(i).getBackgroundPath()
                            ,cerUtilsVos.get(i).getStuName(),cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath()
                            ,cerUtilsVos.get(i).getTraYear());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }


            //转换一下图片路径，将反斜杠替换掉
            String url = cerImgUrl.replace(ValuesUtil.localUrl, ValuesUtil.returnUrl);
            String imgUrl1 = url.replace("\\", "/");
            traCerDOList.get(i).setImgUrl(imgUrl1);//证书图片
            if (cerUtilsVos.get(i).getType() == 0) {
                //转换一下图片路径，将反斜杠替换掉
                String url1 = cerImgUrlNoSale.replace(ValuesUtil.localUrl, ValuesUtil.returnUrl);
                String imgUrl2 = url1.replace("\\", "/");
                traCerDOList.get(i).setImgUrlNosale(imgUrl2);//不带电子公章的证书图片链接
            }

        }

        trainingCertificatesService.updateBatchById(traCerDOList,traCerDOList.size());
    }

    //产后恢复
    @Async
    public void doTask12(List<CerUtilsVo> cerUtilsVos, List<TrainingCertificatesDO> traCerDOList){
        // 实现run方法
        for (int i = 0; i < cerUtilsVos.size(); i++) {
            //证书图片
            String cerImgUrl = null;
            String cerImgUrlNoSale = null;
            if (cerUtilsVos.get(i).getType() == 0) {
                try {
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
                    cerImgUrl = CerSynthesisUtil.overTrainingImageRecovery(0, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getNumPeriods(), cerUtilsVos.get(i).getTrainingNumber(),
                            cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(), cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getCerMath(),
                            cerUtilsVos.get(i).getCerDay(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getGrade());
                    cerImgUrlNoSale = CerSynthesisUtil.overTrainingImageRecovery(1, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getNumPeriods(), cerUtilsVos.get(i).getTrainingNumber(),
                            cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(), cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getCerMath(),
                            cerUtilsVos.get(i).getCerDay(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getGrade());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else if (cerUtilsVos.get(i).getType() == 1) {
                try {
                    //考评员证书
                    //参数说明：背景图，学员姓名，学员图像， 身份证号码，证书编码，证书名称，有效日期
                    cerImgUrl = CerSynthesisUtil.overTraExaImageRecovery(cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getEffectiveDate(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getGrade(),cerUtilsVos.get(i).getElectronicSeal());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 2) {
                try {
                    //考务技术员证书
                    //参数说明：背景图，学员姓名，学员图像， 身份证号码，证书编码，证书名称，有效日期
                    cerImgUrl = CerSynthesisUtil.overTraExaAffImage(cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getEffectiveDate(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getElectronicSeal());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 3) {
                try {
                    //考务技术员-结业证书
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
                    cerImgUrl = CerSynthesisUtil.overTraAraGradiningImage(0, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getNumPeriods(), cerUtilsVos.get(i).getTrainingNumber(),
                            cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(), cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getCerMath(),
                            cerUtilsVos.get(i).getCerDay(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getWorkUnit());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            else if (cerUtilsVos.get(i).getType() == 4) {
                try {
                    //督导员证
                    //参数说明：背景图，学员姓名，学员图像， 身份证号码，证书编码，证书名称，有效日期
                    cerImgUrl = CerSynthesisUtil.overTraSupervisorExaAffImage(cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getEffectiveDate(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getElectronicSeal());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 5) {
                try {
                    //督导员-结业证书
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
                    cerImgUrl = CerSynthesisUtil.overTraSupervisorGradiningImage(0, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getNumPeriods(), cerUtilsVos.get(i).getTrainingNumber(),
                            cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(), cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getCerMath(),
                            cerUtilsVos.get(i).getCerDay(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getWorkUnit());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 7) {
                try {
                    //公益师资
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
                    cerImgUrl = CerSynthesisUtil.freeOverTrainingImage(0, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getStuImg(),
                            cerUtilsVos.get(i).getIdCard(), cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getNumPeriods(), cerUtilsVos.get(i).getTrainingNumber(),
                            cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(), cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getCerMath(),
                            cerUtilsVos.get(i).getCerDay(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getWorkUnit());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            else if (cerUtilsVos.get(i).getType() == 103) {
                try {
                    //优秀案例
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
                    cerImgUrl = CerSynthesisUtil.prizeImageYXAL(0,cerUtilsVos.get(i).getBackgroundPath()
                            ,cerUtilsVos.get(i).getStuName(),cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath()
                            ,cerUtilsVos.get(i).getCerDay(),cerUtilsVos.get(i).getWorkUnit()
                            , cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getNumPeriods(),cerUtilsVos.get(i).getTraYear());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            else if (cerUtilsVos.get(i).getType() == 104) {
                try {
                    //优秀案例
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
                    cerImgUrl = CerSynthesisUtil.prizeImageYXZZ(1,cerUtilsVos.get(i).getBackgroundPath()
                            ,cerUtilsVos.get(i).getStuName(),cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath()
                           ,cerUtilsVos.get(i).getTraYear());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
//            else if (cerUtilsVos.get(i).getType() == 102) {
//                try {
//                    //职业技能师资证书 vocational skills
//                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名， 身份证号码，证书编码，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份
//                    cerImgUrl = CerSynthesisUtil.vocationalSkills(1, cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(),
//                            cerUtilsVos.get(i).getCerNumber(), cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getTraMath(), cerUtilsVos.get(i).getTraDay(),
//                            cerUtilsVos.get(i).getCerYear(), cerUtilsVos.get(i).getElectronicSeal(),cerUtilsVos.get(i).getPracticeItem());
//                } catch (Exception e) {
//                    e.printStackTrace();
//                }
//            }
            else if (cerUtilsVos.get(i).getType() == 11||cerUtilsVos.get(i).getType() == 12||cerUtilsVos.get(i).getType() == 13) {
                try {
                    //优秀学员
                    //参数说明：合成类型（0带公章，1不带公章），背景图，学员姓名，学员图像， 身份证号码，证书编码，考核期数，培训章节数（学时），培训年份，培训月份，培训日期，获证年份，获证年份，获证年份，电子公章
//                    cerImgUrl = CerSynthesisUtil.prizeImage(cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(),  cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getTraYear());
                    cerImgUrl = CerSynthesisUtil.prizeImage1(cerUtilsVos.get(i).getBackgroundPath(), cerUtilsVos.get(i).getStuName(), cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getTraYear(), cerUtilsVos.get(i).getType());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }else if (cerUtilsVos.get(i).getType() == 17||cerUtilsVos.get(i).getType() == 18) {
                try {
                    cerImgUrl = CerSynthesisUtil.prizeImageSHiZi4(0,cerUtilsVos.get(i).getBackgroundPath()
                            ,cerUtilsVos.get(i).getStuName(),cerUtilsVos.get(i).getStuImg(),cerUtilsVos.get(i).getCerNumber(),cerUtilsVos.get(i).getElectronicSeal(),
                            cerUtilsVos.get(i).getTraYear(),cerUtilsVos.get(i).getTraMath(),cerUtilsVos.get(i).getTraDay(),cerUtilsVos.get(i).getTrainingNumber(),
                            cerUtilsVos.get(i).getIdCard(),cerUtilsVos.get(i).getWorkUnit(),cerUtilsVos.get(i).getNumPeriods(),cerUtilsVos.get(i).getCerYear(),cerUtilsVos.get(i).getCerMath(),cerUtilsVos.get(i).getCerDay());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            //转换一下图片路径，将反斜杠替换掉
            String url = cerImgUrl.replace(ValuesUtil.localUrl, ValuesUtil.returnUrl);
            System.out.println("证书地址+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"+url);
            String imgUrl1 = url.replace("\\", "/");
            traCerDOList.get(i).setImgUrl(imgUrl1);//证书图片
            if (cerUtilsVos.get(i).getType() == 0) {
                //转换一下图片路径，将反斜杠替换掉
                String url1 = cerImgUrlNoSale.replace(ValuesUtil.localUrl, ValuesUtil.returnUrl);
                String imgUrl2 = url1.replace("\\", "/");
                traCerDOList.get(i).setImgUrlNosale(imgUrl2);//不带电子公章的证书图片链接
            }

        }

        trainingCertificatesService.updateBatchById(traCerDOList,traCerDOList.size());
    }

    @Async
    public void mk(Long examBatchId){
        //获取考试批次
        ExaminationBatchDO examinationBatchDO = examinationBatchService.findOneByKv("id",examBatchId);
        //根据考试批次id对应的认证批次id,查询对应的所有考生信息
        List<StuSignUpDO> stuSignUpDOS = stuSignUpService.findByKv("cbatch_id", examinationBatchDO.getId());
        //1548681999388348422
        if (stuSignUpDOS != null && stuSignUpDOS.size() > 0) {
            for (StuSignUpDO stuSignUpDO : stuSignUpDOS) {

                Integer result = 0;
                ExaminationPaperDO examinationPaperDO = examinationPaperService.findOneByKv("ebatch_id", examinationBatchDO.getId(), "state", 1);
                //如果一个考生出现两套答卷只取其中一份答卷
                if(examinationPaperDO==null)return;
                List<ExaminationAnswerSheetDO> examinationAnswerSheetDOs = examinationAnswerSheetService
                        .findByKv("stu_sign_id", stuSignUpDO.getId(), "epaper_id", examinationPaperDO.getId());
                ExaminationAnswerSheetDO examinationAnswerSheetDO = null;
                //查询到考生对应的答卷

                if(examinationAnswerSheetDOs!=null && examinationAnswerSheetDOs.size()>0)
                    examinationAnswerSheetDO=examinationAnswerSheetDOs.get(0);
                List<Long> idss = examinationQuestionsService.selIdList(examinationPaperDO.getId());
                //试卷对应的试题，有试题才算分，没有直接0分处理；
                if(idss != null && idss.size()>0){
                    if (examinationAnswerSheetDO != null) {
                        //有答卷才算分，没有直接返回0
                        result = results(examinationAnswerSheetDO.getAnswerList(),idss);//考试总分

                    }
                }
                System.out.println("考试成绩=="+result+"名称="+stuSignUpDO.getName());
                ExaminationResultsDO examinationResultsDOss = examinationResultsService
                        .findOneByKv("cbatch_id", examinationBatchDO.getCbatchId(), "ebatch_id", examinationBatchDO.getId(), "stu_sign_id", stuSignUpDO.getId());
                if (examinationResultsDOss == null) {
                    ExaminationResultsDO examinationResultsDO = new ExaminationResultsDO();
                    examinationResultsDO.setCbatchId(examinationBatchDO.getCbatchId());//认证批次id
                    examinationResultsDO.setEbatchId(examinationPaperDO.getEbatchId());//考试批次id
                    examinationResultsDO.setStuSignId(stuSignUpDO.getId());//考生信息id
                    if(examinationAnswerSheetDO == null){
                        examinationResultsDO.setState(1);//缺考
                    }else{


                        examinationResultsDO.setState(0);//正常
                    }
                    examinationResultsDO.setTotalScore(result.doubleValue());//考试成绩
                    boolean b = examinationResultsService.insert(examinationResultsDO);
//                    if (!b) {
//                        return Result.fail("认证批次：" + stuSignUpDO.getCbatchId() + "，中的考试批次：" + examinationPaperDO.getEbatchId() + "，下的考生：" + stuSignUpDO.getName() + "的成绩录入失败！");
//                    } else {
                    if (examinationAnswerSheetDO != null) {
                        examinationAnswerSheetDO.setState(1);//改成已阅卷
                        boolean c = examinationAnswerSheetService.updateById(examinationAnswerSheetDO);
//                            if (!c) {
//                                return Result.fail("认证批次：" + stuSignUpDO.getCbatchId() + "，中的考试批次：" + examinationPaperDO.getEbatchId() + "，下的考生：" + stuSignUpDO.getName() + "答卷状态更改失败！");
//                            }
                    }

                    if (result >= examinationBatchDO.getPassMark()) {
                        stuSignUpDO.setState(6);//状态改为理论已过
                        boolean sbc = stuSignUpService.updateById(stuSignUpDO);
//                            if (!sbc) {
//                                return Result.fail("认证批次：" + stuSignUpDO.getCbatchId() + "，中的考试批次：" + examinationPaperDO.getEbatchId() + "，下的考生：" + stuSignUpDO.getName() + "的更新状态失败！");
//                            }
                    }

                    //  }
                }else {
                    if(examinationAnswerSheetDO == null){
                        examinationResultsDOss.setState(1);//缺考
                    }else{
                        examinationResultsDOss.setState(0);//正常
                    }
                    examinationResultsDOss.setTotalScore(result.doubleValue());//考试成绩
                    boolean b = examinationResultsService.updateById(examinationResultsDOss);
//                    if (!b) {
//                        return Result.fail("认证批次：" + stuSignUpDO.getCbatchId() + "，中的考试批次：" + examinationPaperDO.getEbatchId() + "，下的考生：" + stuSignUpDO.getName() + "的成绩录入失败！");
//                    } else {
                    if (examinationAnswerSheetDO != null) {
                        examinationAnswerSheetDO.setState(1);//改成已阅卷
                        boolean c = examinationAnswerSheetService.updateById(examinationAnswerSheetDO);
//                            if (!c) {
//                                return Result.fail("认证批次：" + stuSignUpDO.getCbatchId() + "，中的考试批次：" + examinationPaperDO.getEbatchId() + "，下的考生：" + stuSignUpDO.getName() + "答卷状态更改失败！");
//                            }
//                        }

                        if (result >= examinationBatchDO.getPassMark()) {
                            stuSignUpDO.setState(6);//状态改为理论已过
                            boolean sbc = stuSignUpService.updateById(stuSignUpDO);
//                            if (!sbc) {
//                                return Result.fail("认证批次：" + stuSignUpDO.getCbatchId() + "，中的考试批次：" + examinationPaperDO.getEbatchId() + "，下的考生：" + stuSignUpDO.getName() + "的更新状态失败！");
//                            }
                        }

                    }
                }

            }
        }
    }

    private Integer results(String answers,List<Long> idss) {
        Integer results = 0;
        if(StringUtils.isNotBlank(answers)){
            JSONArray jsonArray2 = JSONArray.fromObject(answers);
            for(int i = 0;i<jsonArray2.size();i++){
                if(idss.indexOf(Long.parseLong(jsonArray2.getJSONObject(i).getString("id"))) > -1){
                    ExaminationQuestionsDO examinationQuestionsDO = examinationQuestionsService.selectById(Long.parseLong(jsonArray2.getJSONObject(i).getString("id")));
                    if(!jsonArray2.getJSONObject(i).containsKey("value"))continue;
                    if (examinationQuestionsDO.getType() == 0 || examinationQuestionsDO.getType() == 2) {//单选题和判断题，答案唯一，可以不用拆解了
                        if (examinationQuestionsDO.getAnswers().equals(jsonArray2.getJSONObject(i).getString("value"))) {
                            //System.out.println("正确题目ID："+jsonArray2.getJSONObject(i).getString("id"));
                            results = results + examinationQuestionsDO.getScore();
                        }
                    } else if (examinationQuestionsDO.getType() == 1) {//多选题因为答案有多个，需要循环判断一下是否包含该答案
//                        String[] ssb = jsonArray2.getJSONObject(i).getString("value").split(";;");
//                        String answer = "";
//                        for (int n = 0; n < ssb.length; n++) {
//                            if (answer == "") {
//                                answer = ssb[n];
//                            } else {
//                                answer = answer + ";;" + ssb[n];
//                            }
//                        }
                        String[] ssb = jsonArray2.getJSONObject(i).getString("value").split(";;");

                        //------
                        boolean isRight=true;
                        if(ssb.length>1){
                            if(ssb[1]==null||ssb[1]==""){
                                isRight=false;
                            }else{
                                String answer = examinationQuestionsDO.getAnswers();
                                if(ssb.length!=answer.split(";;").length){
                                    isRight=false;
                                }else {
                                    for (int n = 0; n < ssb.length; n++) {
                                        //if (ssb[n].equals("A") || ssb[n].equals("B") || ssb[n].equals("C") || ssb[n].equals("D") || ssb[n].equals("E") || ssb[n].equals("F")) {
                                        if (!answer.contains(ssb[n])) {
                                            isRight = false;
                                            break;
                                        }

                                    }
                                }
                            }
                        }else {
                            isRight=false;
                        }
                        if (isRight) {
                            results = results + examinationQuestionsDO.getScore();
                        }



                    }
                }
            }
        }

        return results;
    }

}
